//////////////////////////////////////////////////////////////////////////////////////////////////////// ////// created by Jan Łukasz Górski, janlgorski@gmail.com, http://mathmed.blox.pl 100% opensource ////// //////////////////////////////////////////////////////////////////////////////////////////////////////// // version 01.02.2012 /* // SIMPLEST USE // my script // created canvas element we draw on */ //////////////////////////////////////////////////////////////////////////////////////////////////////// /* options : this.horizontalNR = number -> number of horizontal lines ( myp.horizontalNR = number ) this.fSize=10; -> font size this.textColor = 'rgba(red,green,blue,alpha)'; this.plotColor = 'rgba(red,green,blue,alpha)'; this.gridColor = 'rgba(red,green,blue,alpha)'; this.bgColor = 'rgba(red,green,blue,alpha)'; this.enumerateV = 1; -> vertical axis numeration this.enumerateH = 1; -> horizontal axis numeration this.lineWidthP = px -> plot line thickness this.lineWidthG = px -> grid lines thickness this.adjustTrimmer = nr -> adjusts auto precision */ //////////////////////////////////////////////////////////////////////////////////////////////////////// function MakeDraw() { ///////////////////////// optional this.prepSurface = function () { document.write(""); } ///////////////////////// //////// prepares user interface this.prepUI = function () { var canvas=document.getElementById(this.id); var ctx=canvas.getContext('2d'); ctx.font = (this.fSize+"px sans-serif"); return ctx; } //////// determines spacing between horizontal and vertical lines this.spacing = function (orientation,number) { var canvas=document.getElementById(this.id); if (orientation == "horizontal") { var spac=((canvas.width-this.offsetL-this.offsetR)/number); } else { var spac=(canvas.height-(this.fSize*2))/number; } return spac; } //////// draws grid this.drawGrid = function() { var canvas=document.getElementById(this.id); var hei = canvas.height-this.fSize*2; var wid = canvas.width-this.offsetR; var spacH,spacV; var precalc; ctx.fillStyle = this.bgColor; ctx.fillRect(0,0,canvas.width,canvas.height); ctx.lineWidth = this.lineWidthG; ctx.strokeStyle = this.gridColor; ctx.beginPath(); spacH = this.spacing("horizontal",this.data.length); for(var i=0, len = this.data.length; iarr[1]) arr[1]=this.data[i]; } if (arr[1]-arr[0]<0.1) { arr[0]=arr[1]-0.1; arr[1]=arr[1]+0.1; } return arr; } //////// modifies spacing basing on length of labels ( number ) function determineSpacing(number) { var spacing=0; do { number/=10; spacing++; } while (number>1); return spacing; } //////// determines offsets this.determineOffsets = function() { var range=this.getDataRange(); if (this.enumerateV) this.offsetL = (determineSpacing(this.dataTrimmer)+2+determineSpacing(Math.max(Math.abs(range[0]),Math.abs(range[1]))))*this.fSize*0.6; if (this.enumerateP) this.offsetR = (determineSpacing(this.dataTrimmer)+2+determineSpacing(Math.abs(this.data[this.data.length-1])))*this.fSize*0.6; if (this.enumerateH) this.offsetR = Math.max(this.offsetR,(determineSpacing(this.data.length))*this.fSize*0.6); } //////// draws linear graph and enumerates axes/curve this.drawGraphLinear = function() { var canvas=document.getElementById(this.id); var spacHoriz = this.spacing("horizontal",this.data.length); var spacVertic = this.spacing("vertical",this.horizontalNR); var hei=canvas.height-2*(spacVertic+this.fSize); var range=this.getDataRange(); var totalRange=range[1]-range[0]; var verticalCoefficient=hei/totalRange; var lookupTable = new Array(); for(var i=0, len = this.data.length; ithis.data[i]) { ctx.fillText(Math.round(this.data[i]*this.dataTrimmer)/this.dataTrimmer,i*spacHoriz+this.offsetL,lookupTable[i]+12); } else { ctx.fillText(Math.round(this.data[i]*this.dataTrimmer)/this.dataTrimmer,i*spacHoriz+this.offsetL,lookupTable[i]-7); } } } if ((this.enumerateH) && (this.seriesIdx == 0)) { var spaceNeeded = this.data.length*this.fSize*determineSpacing(this.data.length); if (spaceNeeded < canvas.width) { for(var i=0, len = this.enumerateHlabels.length; i 0) ctx.fillStyle = this.plotColor; if (this.enumerateV) { for(var i=0; i